@大麻哈
3年前 提问
1个回答

无文件恶意软件怎么取证

在下炳尚
3年前
官方采纳

使用命令行进行攻击取证:

bindshell启动后会立即绑定到TCP 31337端口,执行反弹shell操作,开始发送盗取的敏感数据等。可以先使用netstat和ps命令收集攻击信息。

通过netstat命令,我们注意到了一个反常的tcp端口,该端口的进程名也很奇怪:

netstat -nalp

图片

如上图所示,该进程的PID为14667。下一步通过PS命令查看该进程一些具体信息:

ps -auxw

图片

我们在进程列表中,看到它的进程名为[kwerker/0:sandfly],这将帮助它隐藏在具有相似名称的合法进程中。您可以在上面的列表中看到,如果不使用sandfly标识符进行命名,真的很难发现它。

现在已经找到了可疑进程,下一步就要想办法获取该进程的具体信息。由于接下来大多数操作将在/proc目录中进行,先转到/proc/目录,其中PID是可疑进程ID。可以使用以下命令进入该目录:

cd / proc / 14667

在进程目录中,可以使用ls命令列出文件夹中的内容。Linux内核将实时构建目录,显示许多有价值的信息。

ls -al

图片

通过简单的ls命令我们可以获知:1.进程启动时的日期戳。2.当前的工作目录(用户最有可能在/root下启动进程)。3.EXE链接指向一个已删除的二进制文件的位置。

最重要的一点是,在Linux上,除了少数用例外,具有deleted标记的二进制文件的进程通常是恶意的。而且,该进程不仅被删除,还指向一个非常不寻常的位置了/memfd:这是攻击所使用的内存文件描述符。

使用Comm和Cmdline参数查找隐藏的Linux进程

在/ proc目录下的comm和cmdline文件会记录进程的命令名和进程的完整命令行信息,这是一个很好的切入点。

当启动进程时含有参数时,会在各个参数中使用字符’’进行分割。所以当使用cat命令查看cmdline文件内容时,只能打印出第一个参数,即进程名。所以可以使用cat命令查看comm文件,使用strings命令来查看cmdline文件。

cat commstrings cmdline

comm和cmdline文件显示以下内容:

图片

在在Linux中,大多数情况下,文件应当显示一个基本上相互匹配的二进制名称。例如,如果您在nginx这样的web服务器上运行此程序,您将在这两个文件中的某个位置看到nginx名称。但是在这个示例中,comm文件中只是一个数字“3”,这是进程伪装的一种手段。同样,cmdline文件夹中的内容也很奇怪。这两个文件并未正确记录进程名称。

通过进程映射来验证二进制名称

/proc/[pid]/maps文件可以显示进程的内存区域映射信息。在这里也可以找到二进制名称,以及运行时正在使用的其他库文件。通常,该文件的第一部分包含对正在运行的二进制文件的引用(例如/usr/bin/vi)。但是在文件中,我们再一次看到了对/memfd: (deleted)的奇怪引用。

cat maps

图片

调查Linux进程环境

很多人可能会忽略在Linux上,当你启动一个进程时,它通常会附加一系列环境变量。在大多数情况下,由用户启动的任何进程都会出现在这里。我们试图通过查看/proc//environ文件夹获取进程信息。

同样,出于格式化的原因,我们将使用strings命令,这样更易于阅读。strings environ

图片

恶意软件是通过SSH传入的,纵使攻击者设法清理的有关IP地址的日志,但是启动进程时还是会留下蛛丝马迹。

抓取二进制文件

即便二进制文件没有在磁盘上存在,仍可以非常便捷的恢复注入的二进制文件。

cp /proc//exe /destination_dir/filename在本示例中,命令如下:cp exe /tmp/malware.recovered

该文件被恢复到/tmp/malware.recovered下。可以像往常一样对恶意样本进行分析,还可以为二进制文件生成hash值:sha1sum exesha1sum /tmp/malware.recovered

图片

收集到的信息

到目前为止,我们收集到了如下信息:

1.可疑的可执行文件的路径。

2.进程使用的端口号。

3.进程名。

4.comm和cmdline文件中没有引用相同的命令名。

5.comm文件内容只有一个字符长。

6.进程当前的工作目录位于/ root下。

7.进程试图链接已被删除的/memfd位置,而不是合法的二进制路径。

8.进程映射文件显示相同的已删除位置。

9.恶意软件是通过SSH传入的